# 为路由添加元数据，用于自动生成API文档
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
import uvicorn
import os

app = FastAPI()


# 获取项目根目录的绝对路径（test 目录）
# __file__ 是当前脚本的路径，向上找两级目录到 test 根目录
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 拼接 static 目录的绝对路径
static_dir = os.path.join(project_root, "static")

# print(os.path.exists(static_dir)) #  True为存在，False为不存在

# 挂载本地静态文件目录（用拼接好的绝对路径 static_dir）
app.mount("/static", StaticFiles(directory=static_dir), name="static")

# 自定义 ReDoc 文档，指定本地资源路径
@app.get("/redoc", include_in_schema=False)
def custom_redoc():
    return {
        "openapi": "3.0.0",
        "info": {"title": "Custom ReDoc", "version": "1.0.0"},
        "servers": [{"url": "/"}],
        "paths": {},
        "components": {},
        "tags": [],
        "x-redoc": {
            "lazyRender": True,
            "script": "/static/redoc.standalone.js"  # 指向本地静态资源路径
        }
    }

@app.get("/items/", tags=["items"], summary="获取所有项目", description="获取所有项目")
async def read_items():
    """
    详细描述：
    - 这是获取项目列表的接口
    - 支持分页等功能
    """
    return [{"name": "项目1"}, {"name": "项目2"}]

if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000)
# 访问：http://127.0.0.1:8000/items/
# 运行后访问http://127.0.0.1:8000/docs，即可看到自动生成的API文档（需要下载ReDoc）
